//#include <iostream>
//using namespace std;
//#pragma pack(1)
//class Human {
//public:
//private:
//	int m_age;
//	string m_name;
//};
//class Student :public Human {
//public:
//private:
//	int m_no;
//};
//
//int main(void) {
//	Human h;
//	cout << "基类对象h的大小:" << sizeof(h) << endl;
//	Student s;
//	cout << "子类对象s的大小:" << sizeof(s) << endl;
//
//	Human* ph = &s;//Student* -->Human*
//	Human& rh = s;
//	//以上两行代码，编译器认为访问范围缩小，是安全的（向上造型）
//
//	//Student* ps = static_cast<Student*>(&h);//Human* -->Student*
//	//Student& rs = static_cast<Student&>(h);//Human& -->Student&
//	////编译器认为访问范围扩大，是危险的
//	////通过强制无语法问题，但依然有风险存在（存在越界风险）
//	Student* ps = static_cast<Student*>(ph);//Human* -->Student*
//	Student& rs = static_cast<Student&>(rh);//Human& -->Student&
//	//以上良好代码如果成功，没有任何风险，建议这么做
//	return 0;
//}